//
//  WBTabBar.swift
//  weiboD
//
//  Created by gao2015 on 2016/11/30.
//  Copyright © 2016年 gao2015. All rights reserved.
//

import UIKit
//代理NSObjectProtocol千万不要忘记写
protocol WBTabBarDelegate:NSObjectProtocol {
    //设置代理方法
   func didSelectAddBtn()
}


class WBTabBar: UITabBar {

    //闭包属性 ()->()代表闭包是这个类型的,外面的括号表示callBack的参数是这个闭包
    var callBack:(()->())?
    //代理属性
    weak var newdelegate : WBTabBarDelegate?
    
    private lazy var composeBtn : UIButton = {
        let button = UIButton()
        button.addTarget(self, action: #selector(composeBtnAction), for: .touchUpInside)
        //设置背景图片
        button.setBackgroundImage(UIImage(named:"tabbar_compose_button"), for: .normal)
        button.setBackgroundImage(UIImage(named:"tabbar_compose_button_highlighted"), for: .highlighted)
        //设置image
        button.setImage(UIImage(named:"tabbar_compose_icon_add"), for: .normal)
        button.setImage(UIImage(named:"tabbar_compose_icon_add_highlighted"), for: .highlighted)
        //按钮大小和图片大小一样
        button.sizeToFit()
        return button
    }()
    
    //MARK:--创建这个tabBar的构造方法
    //构造方法,tabBar创建的时候会调用这个方法
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.setupUI()
    }
    //构造方法，xib或者storyBoard创建会调用这个方法
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.setupUI()
    }
    //布局
    func setupUI()  {
        addSubview(composeBtn)
        
    //MARK:--只要有子控件要布局就会调用layoutSubView方法
    }
    //布局子控件会调用,重写之调整子控件布局
    override func layoutSubviews() {
        super.layoutSubviews()
        //加号按钮的布局已经确定
        composeBtn.centerX = width / 2
        composeBtn.centerY = height / 2
        var index = 0
        //分配剩余4项的位置
        let BtnWidth = width / 5
        //遍历子控件可以拿到每个子控件
        for childItem in self.subviews{
//            print(childItem)
            //大小有了，还需要位置,若是UITabBarButton才分配位置
            if childItem.isKind(of: NSClassFromString("UITabBarButton")!) {
                //子控件的宽度为
                childItem.width = BtnWidth
                childItem.x = CGFloat(index) * BtnWidth
                index += 1
                if index == 2 {
                    index += 1
                }
            }
        }
    
    }
    //使用private修饰的事件函数在swift的运行循环是找不到的，swift是编译型语言，编译的时候就需要知道我要调用哪个函数，为了追求性能
    //使用@objc 告诉编译器我们用oc的方式去调用这个方法，oc是基于运行时，使用kvc动态分发
    @objc private func composeBtnAction(){
//        print("我是➕")
        //点击加号操作执行闭包
        callBack?()
        //代理去执行
        newdelegate?.didSelectAddBtn()
        
    }
}
